Fix interception of subcommand --version flag
authorAnton Larin <edding.default@gmail.com>
Sat, 30 Jan 2016 09:47:25 +0000 (12:47 +0300)
committerAnton Larin <edding.default@gmail.com>
Sat, 30 Jan 2016 09:47:25 +0000 (12:47 +0300)
Addresses #2286: when subcommand used execute_main_without_stdin and
provided --version flag, cargo intercepted it and printed it's own
version.

src/bin/cargo.rs
src/cargo/lib.rs

index ab2765da5580ffc05ec3e47dead50a7127720921..e37486d9b33945d897cc658fd73e1d95ccc20d0a 100644 (file)
@@ -17,6 +17,7 @@ use cargo::util::{self, CliResult, lev_distance, Config, human, CargoResult};
 pub struct Flags {
     flag_list: bool,
     flag_verbose: bool,
+    flag_version: bool,
     flag_quiet: bool,
     flag_color: Option<String>,
     arg_command: String,
@@ -104,6 +105,11 @@ fn execute(flags: Flags, config: &Config) -> CliResult<Option<()>> {
 
     init_git_transports(config);
 
+    if flags.flag_version {
+        println!("{}", cargo::version());
+        return Ok(None)
+    }
+
     if flags.flag_list {
         println!("Installed Commands:");
         for command in list_commands(config) {
index 8a4b4338d879b1f6c4adf209c60462f366a68947..4590a9cd52bdb002570d6f43fd5ca0017fc40124 100644 (file)
@@ -248,8 +248,7 @@ fn flags_from_args<T>(usage: &str, args: &[String],
     let docopt = Docopt::new(usage).unwrap()
                                    .options_first(options_first)
                                    .argv(args.iter().map(|s| &s[..]))
-                                   .help(true)
-                                   .version(Some(version()));
+                                   .help(true);
     docopt.decode().map_err(|e| {
         let code = if e.fatal() {1} else {0};
         CliError::from_error(human(e.to_string()), code)